ν¨μ¨μ μΈ μ ν리μΌμ΄μ κ΄λ¦¬λ₯Ό μν μλ°μ€ν¬λ¦½νΈ λͺ¨λ νλλ μ΄μ 컨ν μ΄λλ₯Ό νμν΄ λ³΄μΈμ. κ°λ° κ°μν, νμ₯μ± ν₯μ, λ€μν ν κ°μ νμ κ°μ λ°©λ²μ μμ보μΈμ.
μλ°μ€ν¬λ¦½νΈ λͺ¨λ νλλ μ΄μ 컨ν μ΄λ: μ ν리μΌμ΄μ 컨ν μ΄λ κ΄λ¦¬
μ€λλ λΉ λ₯΄κ² μ§ννλ μννΈμ¨μ΄ νκ²½μμ ν¬κ³ 볡μ‘ν μ ν리μΌμ΄μ μ κ΄λ¦¬νλ κ²μ μλΉν λμ μ΄ λ μ μμ΅λλ€. μ ν΅μ μΈ λͺ¨λ리μ μν€ν μ²λ μ’ μ’ λλ¦° κ°λ° μ£ΌκΈ°, λ°°ν¬ λ³λͺ© νμ, κ°λ³ κ΅¬μ± μμ νμ₯μ±μ μ΄λ €μμΌλ‘ μ΄μ΄μ§λλ€. λ°λ‘ μ΄ μ§μ μμ λͺ¨λ νλλ μ΄μ , λ ꡬ체μ μΌλ‘λ λͺ¨λ νλλ μ΄μ 컨ν μ΄λκ° λ±μ₯νμ¬ νμ₯ κ°λ₯νκ³ μ μ§λ³΄μνκΈ° μ¬μ°λ©° νμ μ΄ μ©μ΄ν μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν κ°λ ₯ν μ루μ μ μ 곡ν©λλ€. μ΄ κΈμμλ μλ°μ€ν¬λ¦½νΈ λͺ¨λ νλλ μ΄μ 컨ν μ΄λμ κ°λ μ μ¬λ μκ² νκ³ λ€μ΄ κ·Έ μ΄μ , ꡬν λ°©λ² λ° λͺ¨λ² μ¬λ‘λ₯Ό νμν©λλ€.
λͺ¨λ νλλ μ΄μ μ΄λ 무μμΈκ°?
λͺ¨λ νλλ μ΄μ μ μΉν© 5μ ν¨κ» λμ λ μλ°μ€ν¬λ¦½νΈ μν€ν μ² ν¨ν΄μΌλ‘, λ 립μ μΌλ‘ λΉλλκ³ λ°°ν¬λ μλ°μ€ν¬λ¦½νΈ μ ν리μΌμ΄μ μ΄ λ°νμμ μ½λμ κΈ°λ₯μ 곡μ ν μ μλλ‘ ν©λλ€. μ΄λ λΈλΌμ°μ μμ μ¬λ¬ λ€λ₯Έ μ ν리μΌμ΄μ λλ μ ν리μΌμ΄μ μ μΌλΆλ₯Ό λμ μΌλ‘ μ°κ²°νλ λ°©λ²μ΄λΌκ³ μκ°ν μ μμ΅λλ€.
μ ν΅μ μΈ λ§μ΄ν¬λ‘νλ‘ νΈμλ μν€ν μ²λ μ’ μ’ λΉλ νμ ν΅ν©μ΄λ iframe κΈ°λ° μ루μ μ μμ‘΄νλλ°, μ΄ λ κ°μ§ λͺ¨λ νκ³κ° μμ΅λλ€. λΉλ νμ ν΅ν©μ μ ν리μΌμ΄μ κ°μ κ°ν κ²°ν©κ³Ό μ¦μ μ¬λ°°ν¬λ‘ μ΄μ΄μ§ μ μμ΅λλ€. Iframeμ 격리λ₯Ό μ 곡νμ§λ§, ν΅μ κ³Ό μ€νμΌλ§μ 볡μ‘μ±μ μ΄λνλ κ²½μ°κ° λ§μ΅λλ€.
λͺ¨λ νλλ μ΄μ μ λ 립μ μΌλ‘ κ°λ°λ λͺ¨λμ λ°νμ ν΅ν©μ κ°λ₯νκ² ν¨μΌλ‘μ¨ λ μ°μν ν΄κ²°μ± μ μ 곡ν©λλ€. μ΄ μ κ·Ό λ°©μμ μ½λ μ¬μ¬μ©μ μ΄μ§νκ³ , μ€λ³΅μ±μ μ€μ΄λ©°, λ μ μ°νκ³ νμ₯ κ°λ₯ν μ ν리μΌμ΄μ μν€ν μ²λ₯Ό κ°λ₯νκ² ν©λλ€.
λͺ¨λ νλλ μ΄μ 컨ν μ΄λ μ΄ν΄νκΈ°
λͺ¨λ νλλ μ΄μ 컨ν μ΄λλ λ€λ₯Έ μ ν리μΌμ΄μ μ΄λ 컨ν μ΄λκ° μ¬μ©ν μ μλλ‘ μλ°μ€ν¬λ¦½νΈ λͺ¨λμ λ ΈμΆνλ λ 립μ μΈ λ¨μμ λλ€. μ΄ μ»¨ν μ΄λλ ν΄λΉ λͺ¨λμ λ°νμ νκ²½ μν μ νλ©°, μμ‘΄μ±μ κ΄λ¦¬νκ³ λμ λ‘λ© λ° μ€ν λ©μ»€λμ¦μ μ 곡ν©λλ€.
λͺ¨λ νλλ μ΄μ 컨ν μ΄λμ μ£Όμ νΉμ§:
- λ 립μ±: 컨ν μ΄λλ μλ‘ λ 립μ μΌλ‘ κ°λ°, λ°°ν¬ λ° μ λ°μ΄νΈλ μ μμ΅λλ€.
- λ ΈμΆλ λͺ¨λ: κ° μ»¨ν μ΄λλ λ€λ₯Έ μ ν리μΌμ΄μ μ΄ μ¬μ©ν μ μλ μλ°μ€ν¬λ¦½νΈ λͺ¨λ μΈνΈλ₯Ό λ ΈμΆν©λλ€.
- λμ λ‘λ©: λͺ¨λμ λ°νμμ λ‘λλκ³ μ€νλλ―λ‘ μ μ°νκ³ μ μλ ₯ μλ μ ν리μΌμ΄μ λμμ΄ κ°λ₯ν©λλ€.
- μμ‘΄μ± κ΄λ¦¬: 컨ν μ΄λλ μ체 μμ‘΄μ±μ κ΄λ¦¬νκ³ λ€λ₯Έ 컨ν μ΄λμ μμ‘΄μ±μ 곡μ ν μ μμ΅λλ€.
- λ²μ μ μ΄: 컨ν μ΄λλ λ ΈμΆλ λͺ¨λ μ€ λ€λ₯Έ μ ν리μΌμ΄μ μ΄ μ¬μ©ν΄μΌ ν λ²μ μ μ§μ ν μ μμ΅λλ€.
λͺ¨λ νλλ μ΄μ 컨ν μ΄λ μ¬μ©μ μ΄μ
λͺ¨λ νλλ μ΄μ 컨ν μ΄λλ₯Ό μ±ννλ©΄ 볡μ‘ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ μ‘°μ§μ μλ§μ μ΄μ μ μ 곡ν©λλ€:
1. ν₯μλ νμ₯μ±
λͺ¨λ νλλ μ΄μ μ μ¬μ©νλ©΄ λκ·λͺ¨ λͺ¨λ리μ μ ν리μΌμ΄μ μ λ μκ³ κ΄λ¦¬νκΈ° μ¬μ΄ λ§μ΄ν¬λ‘νλ‘ νΈμλλ‘ λΆν ν μ μμ΅λλ€. κ° λ§μ΄ν¬λ‘νλ‘ νΈμλλ λ 립μ μΌλ‘ λ°°ν¬ λ° νμ₯λ μ μμ΄ λ¦¬μμ€ ν λΉμ μ΅μ ννκ³ μ λ°μ μΈ μ ν리μΌμ΄μ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ μμκ±°λ μΉμ¬μ΄νΈλ μν λͺ©λ‘, μ₯λ°κ΅¬λ, μ¬μ©μ κ³μ , κ²°μ μ²λ¦¬λ₯Ό μν λ³λμ 컨ν μ΄λλ‘ λλ μ μμ΅λλ€. μΌν μ±μκΈ°μλ μν λͺ©λ‘κ³Ό κ²°μ μ²λ¦¬ 컨ν μ΄λλ₯Ό λ 립μ μΌλ‘ νμ₯ν μ μμ΅λλ€.
2. κ°μ λ νμ
λͺ¨λ νλλ μ΄μ μ μ¬λ¬ νμ΄ μλ‘μ μμ μ λ°©ν΄νμ§ μκ³ λμμ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμμ μμ ν μ μκ² ν©λλ€. κ° νμ μ체 컨ν μ΄λλ₯Ό μμ νκ³ μ μ§ κ΄λ¦¬ν μ μμ΄ μΆ©λ μνμ μ€μ΄κ³ κ°λ° μλλ₯Ό ν₯μμν¬ μ μμ΅λλ€. λ€λ₯Έ μ§μμ μμΉν νλ€μ΄ κΈλ‘λ² μΉ μ ν리μΌμ΄μ μ κ°κΈ° λ€λ₯Έ κΈ°λ₯μ μ± μμ§λ λ€κ΅μ κΈ°μ μ μκ°ν΄ 보μμμ€. λͺ¨λ νλλ μ΄μ μ ν΅ν΄ μ΄λ€ νμ λ 립μ μΌλ‘ μμ νλ©° νμ μ μ΄μ§νκ³ μμ‘΄μ±μ μ€μΌ μ μμ΅λλ€.
3. μ½λ μ¬μ¬μ©μ± μ¦κ°
λͺ¨λ νλλ μ΄μ μ λ€λ₯Έ μ ν리μΌμ΄μ μ΄λ 컨ν μ΄λκ° κ³΅ν΅ μ»΄ν¬λνΈμ μ νΈλ¦¬ν°λ₯Ό 곡μ ν μ μλλ‘ νμ¬ μ½λ μ¬μ¬μ©μ μ΄μ§ν©λλ€. μ΄λ μ½λ μ€λ³΅μ μ€μ΄κ³ , μΌκ΄μ±μ ν₯μμν€λ©°, μ μ§λ³΄μλ₯Ό λ¨μνν©λλ€. λκ·λͺ¨ μ‘°μ§μμ μ¬μ©νλ λ΄λΆ λꡬ λͺ¨μμ μμν΄ λ³΄μμμ€. λͺ¨λ νλλ μ΄μ μ μ¬μ©νμ¬ λͺ¨λ λꡬμμ κ³΅ν΅ UI μ»΄ν¬λνΈ, μΈμ¦ λ‘μ§, λ°μ΄ν° μ κ·Ό λΌμ΄λΈλ¬λ¦¬λ₯Ό 곡μ ν¨μΌλ‘μ¨ κ°λ° λ Έλ ₯μ μ€μ΄κ³ μΌκ΄λ μ¬μ©μ κ²½νμ 보μ₯ν μ μμ΅λλ€.
4. λ λΉ λ₯Έ κ°λ° μ£ΌκΈ°
μ ν리μΌμ΄μ μ λ μκ³ λ 립μ μΈ μ»¨ν μ΄λλ‘ λΆν ν¨μΌλ‘μ¨ λͺ¨λ νλλ μ΄μ μ λ λΉ λ₯Έ κ°λ° μ£ΌκΈ°λ₯Ό κ°λ₯νκ² ν©λλ€. νμ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμ μν₯μ μ£Όμ§ μκ³ μ체 컨ν μ΄λλ₯Ό λ°λ³΅ κ°λ°ν μ μμ΄ λ λΉ λ₯Έ 릴리μ€μ μμ₯ μΆμ μκ° λ¨μΆμΌλ‘ μ΄μ΄μ§λλ€. λ΄μ€ κΈ°κ΄μ μ보μ νΉμ§ κΈ°μ¬λ‘ μΉμ¬μ΄νΈλ₯Ό μ§μμ μΌλ‘ μ λ°μ΄νΈν©λλ€. λͺ¨λ νλλ μ΄μ μ μ¬μ©νλ©΄ μ¬λ¬ νμ΄ μΉμ¬μ΄νΈμ λ€λ₯Έ μΉμ (μ: κ΅μ λ΄μ€, μ€ν¬μΈ , λΉμ¦λμ€)μ μ§μ€νκ³ λ 립μ μΌλ‘ μ λ°μ΄νΈλ₯Ό λ°°ν¬νμ¬ μ¬μ©μκ° νμ μ΅μ μ 보μ μ κ·Όν μ μλλ‘ λ³΄μ₯ν μ μμ΅λλ€.
5. λ¨μνλ λ°°ν¬
λͺ¨λ νλλ μ΄μ μ κ°λ³ 컨ν μ΄λλ₯Ό λ 립μ μΌλ‘ λ°°ν¬ν μ μλλ‘ νμ¬ λ°°ν¬λ₯Ό λ¨μνν©λλ€. μ΄λ λ°°ν¬ μ€ν¨μ μνμ μ€μ΄κ³ μ λ°μ΄νΈλ₯Ό μ μ§μ μΌλ‘ μΆμν μ μκ² ν©λλ€. μ¨λΌμΈ λ± νΉ νλ«νΌμ μ λ°μ΄νΈλ₯Ό λ°°ν¬ν΄μΌ νλ κΈμ΅ κΈ°κ΄μ μκ°ν΄ 보μμμ€. λͺ¨λ νλλ μ΄μ μ μ¬μ©νλ©΄ μ 체 νλ«νΌμ μ€νλΌμΈμΌλ‘ μ ννμ§ μκ³ λ νΉμ κΈ°λ₯(μ: μ²κ΅¬μ κ²°μ , κ³μ’ μ΄μ²΄)μ λν μ λ°μ΄νΈλ₯Ό λ°°ν¬νμ¬ μ¬μ©μ λΆνΈμ μ΅μνν μ μμ΅λλ€.
6. κΈ°μ λ 립μ
λͺ¨λ νλλ μ΄μ μ μΌλ°μ μΌλ‘ μΉν©κ³Ό κ΄λ ¨μ΄ μμ§λ§, λ€λ₯Έ λ²λ€λ¬ λ° νλ μμν¬μ ν¨κ» ꡬνν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ 체 μ ν리μΌμ΄μ μν€ν μ²μ μ μ½λ°μ§ μκ³ κ° μ»¨ν μ΄λμ κ°μ₯ μ ν©ν κΈ°μ μ€νμ μ νν μ μμ΅λλ€. ν νμ¬λ λͺ¨λ νλλ μ΄μ λλΆμ λμΌν μ ν리μΌμ΄μ λ΄μμ μ¬μ©μ μΈν°νμ΄μ€ μ»΄ν¬λνΈμλ 리μ‘νΈλ₯Ό, λ°μ΄ν° κ΄λ¦¬ κ³μΈ΅μλ μ΅κ·€λ¬λ₯Ό, λνν κΈ°λ₯μλ λ·°μ μ΄μμ€λ₯Ό μ¬μ©νλλ‘ μ νν μ μμ΅λλ€.
λͺ¨λ νλλ μ΄μ 컨ν μ΄λ ꡬννκΈ°
λͺ¨λ νλλ μ΄μ 컨ν μ΄λλ₯Ό ꡬννλ €λ©΄ μ΄λ€ λͺ¨λμ λ ΈμΆνκ³ μ΄λ€ λͺ¨λμ μλΉν μ§ μ μνκΈ° μν΄ λΉλ λꡬ(μΌλ°μ μΌλ‘ μΉν©)λ₯Ό ꡬμ±ν΄μΌ ν©λλ€. λ€μμ κ·Έ κ³Όμ μ λν κ°λ΅μ μΈ κ°μμ λλ€:
1. νΈμ€νΈ μ ν리μΌμ΄μ ꡬμ±νκΈ° (컨ν μ΄λ μλΉμ)
νΈμ€νΈ μ ν리μΌμ΄μ μ λ€λ₯Έ 컨ν μ΄λμ λͺ¨λμ μλΉνλ μ ν리μΌμ΄μ μ λλ€. νΈμ€νΈ μ ν리μΌμ΄μ μ ꡬμ±νλ €λ©΄ λ€μμ μνν΄μΌ ν©λλ€:
- `webpack` λ° `webpack-cli` ν¨ν€μ§ μ€μΉ:
npm install webpack webpack-cli --save-dev - `@module-federation/webpack-plugin` ν¨ν€μ§ μ€μΉ:
npm install @module-federation/webpack-plugin --save-dev - `webpack.config.js` νμΌ μμ±: μ΄ νμΌμλ μΉν© λΉλμ λν ꡬμ±μ΄ ν¬ν¨λ©λλ€.
- `ModuleFederationPlugin` ꡬμ±: μ΄ νλ¬κ·ΈμΈμ μ격 컨ν μ΄λμμ μλΉν λͺ¨λμ μ μνλ μν μ ν©λλ€.
νΈμ€νΈ μ ν리μΌμ΄μ μ μν `webpack.config.js` μμ:
const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin;
const path = require('path');
module.exports = {
entry: './src/index',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
devServer: {
port: 3000,
},
plugins: [
new ModuleFederationPlugin({
name: 'HostApp',
remotes: {
'remoteApp': 'remoteApp@http://localhost:3001/remoteEntry.js',
},
}),
],
};
μ΄ μμ μμ `HostApp`μ `http://localhost:3001/remoteEntry.js`μ μμΉν `remoteApp`μ΄λΌλ μ격 컨ν μ΄λλ‘λΆν° λͺ¨λμ μλΉνλλ‘ κ΅¬μ±λ©λλ€. `remotes` μμ±μ μ격 컨ν μ΄λ μ΄λ¦κ³Ό ν΄λΉ URL κ°μ λ§€νμ μ μν©λλ€.
2. μ격 μ ν리μΌμ΄μ ꡬμ±νκΈ° (컨ν μ΄λ μ 곡μ)
μ격 μ ν리μΌμ΄μ μ λ€λ₯Έ 컨ν μ΄λκ° μλΉν λͺ¨λμ λ ΈμΆνλ μ ν리μΌμ΄μ μ λλ€. μ격 μ ν리μΌμ΄μ μ ꡬμ±νλ €λ©΄ λ€μμ μνν΄μΌ ν©λλ€:
- `webpack` λ° `webpack-cli` ν¨ν€μ§ μ€μΉ:
npm install webpack webpack-cli --save-dev - `@module-federation/webpack-plugin` ν¨ν€μ§ μ€μΉ:
npm install @module-federation/webpack-plugin --save-dev - `webpack.config.js` νμΌ μμ±: μ΄ νμΌμλ μΉν© λΉλμ λν ꡬμ±μ΄ ν¬ν¨λ©λλ€.
- `ModuleFederationPlugin` ꡬμ±: μ΄ νλ¬κ·ΈμΈμ λ€λ₯Έ 컨ν μ΄λμ λ ΈμΆν λͺ¨λμ μ μνλ μν μ ν©λλ€.
μ격 μ ν리μΌμ΄μ μ μν `webpack.config.js` μμ:
const ModuleFederationPlugin = require('webpack').container.ModuleFederationPlugin;
const path = require('path');
module.exports = {
entry: './src/index',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'remoteEntry.js',
libraryTarget: 'system',
},
devServer: {
port: 3001,
},
plugins: [
new ModuleFederationPlugin({
name: 'remoteApp',
filename: 'remoteEntry.js',
exposes: {
'./Button': './src/Button',
},
shared: ['react', 'react-dom'],
}),
],
externals: ['react', 'react-dom']
};
μ΄ μμ μμ `remoteApp`μ `./src/Button`μ μμΉν `./Button`μ΄λΌλ λͺ¨λμ λ ΈμΆνλλ‘ κ΅¬μ±λ©λλ€. `exposes` μμ±μ λͺ¨λ μ΄λ¦κ³Ό κ·Έ κ²½λ‘ κ°μ λ§€νμ μ μν©λλ€. `shared` μμ±μ νΈμ€νΈ μ ν리μΌμ΄μ κ³Ό 곡μ ν΄μΌ ν μμ‘΄μ±μ μ§μ ν©λλ€. μ΄λ λμΌν λΌμ΄λΈλ¬λ¦¬μ μ¬λ¬ 볡μ¬λ³Έμ΄ λ‘λλλ κ²μ λ°©μ§νλ λ° μ€μν©λλ€.
3. νΈμ€νΈ μ ν리μΌμ΄μ μμ μ격 λͺ¨λ μλΉνκΈ°
νΈμ€νΈ λ° μ격 μ ν리μΌμ΄μ μ΄ κ΅¬μ±λλ©΄, μ격 컨ν μ΄λ μ΄λ¦κ³Ό λͺ¨λ μ΄λ¦μ μ¬μ©νμ¬ νΈμ€νΈ μ ν리μΌμ΄μ μμ μ격 λͺ¨λμ κ°μ Έμ μλΉν μ μμ΅λλ€.
νΈμ€νΈ μ ν리μΌμ΄μ μμ μ격 `Button` μ»΄ν¬λνΈλ₯Ό κ°μ Έμ μ¬μ©νλ μμ:
import React from 'react';
import ReactDOM from 'react-dom';
import RemoteButton from 'remoteApp/Button';
const App = () => {
return (
Host Application
);
};
ReactDOM.render( , document.getElementById('root'));
μ΄ μμ μμ `RemoteButton` μ»΄ν¬λνΈλ `remoteApp/Button` λͺ¨λμμ κ°μ Έμ΅λλ€. κ·Έλ¬λ©΄ νΈμ€νΈ μ ν리μΌμ΄μ μ μ΄ μ»΄ν¬λνΈλ₯Ό λ§μΉ λ‘컬 μ»΄ν¬λνΈμΈ κ²μ²λΌ μ¬μ©ν μ μμ΅λλ€.
λͺ¨λ νλλ μ΄μ 컨ν μ΄λ μ¬μ©μ μν λͺ¨λ² μ¬λ‘
λͺ¨λ νλλ μ΄μ 컨ν μ΄λμ μ±κ³΅μ μΈ μ±νμ μν΄ λ€μ λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νμμμ€:
1. λͺ νν κ²½κ³ μ μ
κ° μ»¨ν μ΄λκ° μ μ μλ μ± μμ κ°μ§κ³ λ€λ₯Έ 컨ν μ΄λμ λν μμ‘΄μ±μ μ΅μννλλ‘ μ»¨ν μ΄λ κ°μ κ²½κ³λ₯Ό λͺ ννκ² μ μνμμμ€. μ΄λ λͺ¨λμ±μ μ΄μ§νκ³ μΆ©λ μνμ μ€μ λλ€. λΉμ¦λμ€ λλ©μΈκ³Ό κΈ°λ₯μ κ³ λ €νμμμ€. νκ³΅μ¬ μ ν리μΌμ΄μ μ κ²½μ°, νκ³΅νΈ μμ½, μνλ¬Ό κ΄λ¦¬, κ³ κ° λ‘μ΄ν° νλ‘κ·Έλ¨ λ±μ μν 컨ν μ΄λλ₯Ό κ°μ§ μ μμ΅λλ€.
2. ν΅μ νλ‘ν μ½ μ립
μνΈ μμ©κ³Ό λ°μ΄ν° 곡μ λ₯Ό μ©μ΄νκ² νκΈ° μν΄ μ»¨ν μ΄λ κ°μ λͺ νν ν΅μ νλ‘ν μ½μ μ립νμμμ€. μ΄λ μ΄λ²€νΈ, λ©μμ§ ν λλ 곡μ λ°μ΄ν° μ μ₯μλ₯Ό μ¬μ©νλ κ²μ ν¬ν¨ν μ μμ΅λλ€. 컨ν μ΄λκ° μ§μ ν΅μ ν΄μΌ νλ κ²½μ°, νΈνμ±μ 보μ₯νκΈ° μν΄ μ μ μλ APIμ λ°μ΄ν° νμμ μ¬μ©νμμμ€.
3. νλͺ ν μμ‘΄μ± κ³΅μ
μ΄λ€ μμ‘΄μ±μ 컨ν μ΄λ κ°μ 곡μ ν μ§ μ μ€νκ² κ³ λ €νμμμ€. κ³΅ν΅ μμ‘΄μ±μ 곡μ νλ©΄ λ²λ€ ν¬κΈ°λ₯Ό μ€μ΄κ³ μ±λ₯μ ν₯μμν¬ μ μμ§λ§, λ²μ μΆ©λμ μνμ μ΄λν μλ μμ΅λλ€. `ModuleFederationPlugin`μ `shared` μμ±μ μ¬μ©νμ¬ μ΄λ€ μμ‘΄μ±μ 곡μ νκ³ μ΄λ€ λ²μ μ μ¬μ©ν΄μΌ ν μ§ μ§μ νμμμ€.
4. λ²μ κ΄λ¦¬ ꡬν
μλΉμκ° κ° λͺ¨λμ μ¬λ°λ₯Έ λ²μ μ μ¬μ©ν μ μλλ‘ λ ΈμΆλ λͺ¨λμ λν λ²μ κ΄λ¦¬λ₯Ό ꡬννμμμ€. μ΄λ₯Ό ν΅ν΄ κΈ°μ‘΄ μλΉμμκ² μν₯μ μ£Όμ§ μκ³ νΈνμ±μ΄ κΉ¨μ§λ λ³κ²½ μ¬νμ λμ ν μ μμ΅λλ€. μλ§¨ν± λ²μ λ(SemVer)μ μ¬μ©νμ¬ λͺ¨λ λ²μ μ κ΄λ¦¬νκ³ `remotes` ꡬμ±μμ λ²μ λ²μλ₯Ό μ§μ ν μ μμ΅λλ€.
5. μ±λ₯ λͺ¨λν°λ§ λ° μΆμ
μ μ¬μ μΈ λ³λͺ© νμμ μλ³νκ³ λ¦¬μμ€ ν λΉμ μ΅μ ννκΈ° μν΄ λͺ¨λ νλλ μ΄μ 컨ν μ΄λμ μ±λ₯μ λͺ¨λν°λ§νκ³ μΆμ νμμμ€. λͺ¨λν°λ§ λꡬλ₯Ό μ¬μ©νμ¬ λ‘λ© μκ°, λ©λͺ¨λ¦¬ μ¬μ©λ, μ€λ₯μ¨κ³Ό κ°μ μ§νλ₯Ό μΆμ νμμμ€. λͺ¨λ 컨ν μ΄λμμ λ‘κ·Έλ₯Ό μμ§νκΈ° μν΄ μ€μ μ§μ€μ λ‘κΉ μμ€ν μ¬μ©μ κ³ λ €νμμμ€.
6. 보μ μν₯ κ³ λ €
λͺ¨λ νλλ μ΄μ μ μλ‘μ΄ λ³΄μ κ³ λ € μ¬νμ λμ ν©λλ€. μ λ’°ν μ μλ μμ€μμ λͺ¨λμ λ‘λνκ³ μλμ§ νμΈνκ³ , μ μ± μ½λκ° μ ν리μΌμ΄μ μ μ£Όμ λλ κ²μ λ°©μ§νκΈ° μν μ μ ν 보μ μ‘°μΉλ₯Ό λ§λ ¨νμμμ€. μ½ν μΈ λ³΄μ μ μ± (CSP)μ ꡬννμ¬ μ ν리μΌμ΄μ μ΄ λ¦¬μμ€λ₯Ό λ‘λν μ μλ μμ€λ₯Ό μ ννμμμ€.
7. λ°°ν¬ μλν
μΌκ΄λκ³ μ λ’°ν μ μλ λ°°ν¬λ₯Ό 보μ₯νκΈ° μν΄ λͺ¨λ νλλ μ΄μ 컨ν μ΄λμ λ°°ν¬ νλ‘μΈμ€λ₯Ό μλννμμμ€. CI/CD νμ΄νλΌμΈμ μ¬μ©νμ¬ μ»¨ν μ΄λλ₯Ό μλμΌλ‘ λΉλ, ν μ€νΈ λ° λ°°ν¬νμμμ€. 컨ν μ΄λμ κ·Έ μμ‘΄μ±μ κ΄λ¦¬νκΈ° μν΄ μΏ λ²λ€ν°μ€μ κ°μ 컨ν μ΄λ μ€μΌμ€νΈλ μ΄μ λꡬ μ¬μ©μ κ³ λ €νμμμ€.
μ¬μ© μ¬λ‘ μμ
λͺ¨λ νλλ μ΄μ 컨ν μ΄λλ λ€μκ³Ό κ°μ λ€μν μλ리μ€μμ μ¬μ©λ μ μμ΅λλ€:
- μ μμκ±°λ νλ«νΌ: μν λͺ©λ‘, μ₯λ°κ΅¬λ, μ¬μ©μ κ³μ , κ²°μ μ²λ¦¬λ₯Ό μν λ³λμ 컨ν μ΄λλ₯Ό κ°μΆ λͺ¨λμ μ μμκ±°λ νλ«νΌ ꡬμΆ.
- κΈμ΅ μ ν리μΌμ΄μ : κ³μ’ κ΄λ¦¬, μ²κ΅¬μ κ²°μ , ν¬μ κ΄λ¦¬λ₯Ό μν λ³λμ 컨ν μ΄λλ₯Ό κ°μΆ μ¨λΌμΈ λ± νΉ νλ«νΌ κ°λ°.
- μ½ν μΈ κ΄λ¦¬ μμ€ν (CMS): μ½ν μΈ μμ±, μ½ν μΈ κ²μ, μ¬μ©μ κ΄λ¦¬λ₯Ό μν λ³λμ 컨ν μ΄λλ₯Ό κ°μΆ μ μ°ν CMS νλ«νΌ μ μ.
- λμ보λ μ ν리μΌμ΄μ : λ€μν μμ ―κ³Ό μκ°νλ₯Ό μν λ³λμ 컨ν μ΄λλ₯Ό κ°μΆ λ§μΆ€ν λμ보λ μ ν리μΌμ΄μ ꡬμΆ.
- κΈ°μ ν¬νΈ: μ¬λ¬ λΆμμ μ¬μ λΆλ₯Ό μν λ³λμ 컨ν μ΄λλ₯Ό κ°μΆ κΈ°μ ν¬νΈ κ°λ°.
κΈλ‘λ² μ΄λ¬λ νλ«νΌμ μκ°ν΄ 보μμμ€. μ΄ νλ«νΌμ λͺ¨λ νλλ μ΄μ μ μ¬μ©νμ¬ κ°κΈ° λ€λ₯Έ μΈμ΄ λ²μ μ κ°μ’λ₯Ό ꡬννκ³ , κ° λ²μ μ μ체 컨ν μ΄λμμ νΈμ€ν ν μ μμ΅λλ€. νλμ€μμ νλ«νΌμ μ μνλ μ¬μ©μλ νλμ€μ΄ 컨ν μ΄λλ₯Ό μννκ² μ 곡λ°κ³ , μΌλ³Έ μ¬μ©μλ μΌλ³Έμ΄ λ²μ μ λ³΄κ² λ©λλ€.
κ²°λ‘
μλ°μ€ν¬λ¦½νΈ λͺ¨λ νλλ μ΄μ 컨ν μ΄λλ νμ₯ κ°λ₯νκ³ , μ μ§λ³΄μνκΈ° μ¬μ°λ©°, νμ μ΄ μ©μ΄ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν κ°λ ₯νκ³ μ μ°ν μ κ·Ό λ°©μμ μ 곡ν©λλ€. λκ·λͺ¨ μ ν리μΌμ΄μ μ λ μκ³ λ 립μ μΈ μ»¨ν μ΄λλ‘ λΆν ν¨μΌλ‘μ¨, λͺ¨λ νλλ μ΄μ μ νμ΄ λ ν¨μ¨μ μΌλ‘ μμ νκ³ , λ μμ£Ό μ λ°μ΄νΈλ₯Ό λ°°ν¬νλ©°, μ½λλ₯Ό λ ν¨κ³Όμ μΌλ‘ μ¬μ¬μ©ν μ μκ² ν©λλ€. λͺ¨λ νλλ μ΄μ μ ꡬννλ €λ©΄ μ μ€ν κ³νκ³Ό ꡬμ±μ΄ νμνμ§λ§, νμ₯μ±, νμ , κ°λ° μλ μΈ‘λ©΄μμ μ 곡νλ μ΄μ μ 볡μ‘ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ μ‘°μ§μκ² κ·μ€ν λκ΅¬κ° λ©λλ€. μ΄ κΈμμ μ€λͺ ν λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄, λͺ¨λ νλλ μ΄μ 컨ν μ΄λλ₯Ό μ±κ³΅μ μΌλ‘ μ±ννκ³ κ·Έ μ μ¬λ ₯μ μ΅λν νμ©ν μ μμ΅λλ€.